home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / bbs / con_005c.zip / CONCORD.RAR / FAQFBASE.DOC < prev    next >
Text File  |  1997-04-25  |  4KB  |  126 lines

  1. (* Short demonstration procedures about using Concord filebase O.O1 Gamma-2 *)
  2. (* Written by Pasi Talliniemi on 21-May-95. Document has not been tested... *)
  3. (* Procedures are self explaining, no further comments needed. Questions    *)
  4. (* should be addressed to the author either via Fidonet or Internet e-mail. *)
  5.  
  6. var
  7.  
  8.   Cfg:              ConfigRec;        (* Read this from CONFIG.DAT ..... *)
  9.   HdrFile:          File;             (* ABCDEFGH.HDR header file ...... *)
  10.   TxtFile:          File;             (* ABCDEFGH.TXT description file . *)
  11.   FileListHdr:      FileListRec;      (* Current record in file list ... *)
  12.   FileListDesc:     Array [0..1024] of Char; (* Current file description *)
  13.   FileListUploader: Array [0..35] of Char; (* Uploader of current file . *)
  14.  
  15. Function ReturnFileDatabaseName (FArea: FAreaRec): PathStr;
  16. (* Function AddSlash returns directory name appended by a backslash \ *)
  17. (* Function NumToHex returns longint value in 8 char long hexa number *)
  18. (* Function CRC_32 returns CRC-32 value of given string ............. *)
  19. (* Function Capit returns given string in uppercased format ......... *)
  20. begin
  21.   if FArea.Basename <> '' then begin
  22.     ReturnFileDatabaseName := AddSlash (Cfg.Paths.FilebasePath) +
  23.                               FArea.Basename;
  24.   end else begin
  25.     ReturnFileDatabaseName := AddSlash (Cfg.Paths.FilebasePath) +
  26.                               NumToHex (CRC_32 (Capit (FArea.Name)));
  27.   end;
  28. end;
  29.  
  30. Function OpenFileBase (FArea: FAreaRec): Integer;
  31. var Fname: PathStr;
  32.     IOErr: Integer;
  33. begin
  34.   Fname := ReturnFiledatabaseName (FArea);
  35.   Filemode := 66; (* Read/Write, Denynone *)
  36.   Assign (HdrFile, Fname + '.HDR');
  37.   Assign (TxtFile, Fname + '.TXT');
  38.   {$I-} Reset (HdrFile, SizeOf (FileListRec)); {$I+} IOErr := IOResult;
  39.   if IOErr <> 0 then begin
  40.     OpenFileBase := IOErr;
  41.   end else begin
  42.     {$I-} Reset (TxtFile, 1); {$I+} IOErr := IOResult;
  43.     if IOErr <> 0 then begin
  44.       OpenFileBase := IOErr;
  45.       Close (HdrFile);
  46.     end else begin
  47.       OpenFileBase := 0;
  48.     end;
  49.   end;
  50. end;
  51.  
  52. Function CloseFileBase: Integer;
  53. begin
  54.   {$I-}
  55.   Close (HdrFile);
  56.   Close (TxtFile);
  57.   {$I+}
  58.   CloseFileBase := IOResult;
  59. end;
  60.  
  61. Function FileListCnt: LongInt;
  62. begin
  63.   {$I-} FileListCnt := FileSize (HdrFile); {$I+}
  64.   if IOResult <> 0 then begin
  65.     FileListCnt := 0;
  66.   end;
  67. end;
  68.  
  69. Function ReturnFileListHdr (N: LongInt): Boolean;
  70. var Num: Word;
  71. begin
  72.   ReturnFileListHdr := False;
  73.   if (N >= 1) and (N <= FileListCnt) then begin
  74.     {$I-}
  75.     Seek (HdrFile, N - 1);
  76.     BlockRead (HdrFile, FileListHdr, 1, Num);
  77.     {$I+}
  78.     ReturnFileListHdr := (Num = 1) and (IOResult = 0);
  79.   end;
  80. end;
  81.  
  82. Function ReturnFileListDesc: Boolean;
  83. var Num: Word;
  84. begin
  85.   {$I-}
  86.   Seek (TxtFile, FileListHdr.DescPtr);
  87.   BlockRead (TxtFile, FileListDesc, FileListHdr.DescRecLen, Num);
  88.   {$I+}
  89.   ReturnFileListDesc := (Num = FileListHdr.DescRecLen) and (IOResult = 0);
  90. end;
  91.  
  92. Function ReturnFileListUploader: Boolean;
  93. var Num: Word;
  94. begin
  95.   {$I-}
  96.   Seek (TxtFile, FileListHdr.DescPtr + FileListHdr.DescRecLen);
  97.   BlockRead (TxtFile, FileListUploader, FileListHdr.UpldrLen, Num);
  98.   {$I+}
  99.   ReturnFileListUploader := (Num = FileListHdr.UpldrLen) and (IOResult = 0);
  100. end;
  101.  
  102. Function SaveFileList (N: LongInt): Boolean;
  103. var Num1, Num2, Num3: Word;
  104. begin
  105.   SaveFileList := False;
  106.   if (N >= 1) and (N <= FileListCnt + 1) then begin
  107.     {$I-}
  108.     Seek (HdrFile, N - 1);
  109.     BlockWrite (HdrFile, FileListHdr, 1, Num1);
  110.     Seek (TxtFile, FileListHdr.DescPtr);
  111.     BlockWrite (TxtFile, FileListDesc, FileListHdr.DescRecLen, Num2);
  112.     BlockWrite (TxtFile, FileListUploader, FileListHdr.UpldrLen, Num3);
  113.     {$I+}
  114.     SaveFileList := (Num1 = 1) and (Num2 = FileListHdr.DescRecLen)
  115.                 and (Num3 = FileListHdr.UpldrLen) and (IOResult = 0);
  116.   end;
  117. end;
  118.  
  119. Function AddFileList: Boolean;
  120. begin
  121.   FileListHdr.DescPtr := FileSize (TxtFile);
  122.   AddFileList := SaveFileList (FileListCnt + 1);
  123. end;
  124.  
  125. (* End of document *)
  126.